#ifndef AS5600_H_
#define AS5600_H_

#include "driver/i2c.h"
#include "driver/gpio.h"

#ifdef __cplusplus
extern "C" {
#endif

#define PI 3.14159265358979323846
#define _2PI (2 * PI)
#define RAD_TO_DEG (180.0f / PI)

typedef struct {
    i2c_port_t i2c_num;
    gpio_num_t sda_io;
    gpio_num_t scl_io;

    float angle_prev;
    float vel_angle_prev;
    int64_t angle_prev_ts;
    int64_t vel_angle_prev_ts;

    int32_t full_rotations;
    int32_t vel_full_rotations;
} AS5600_t;

// 初始化
void AS5600_init(AS5600_t *sensor, i2c_port_t i2c_num, gpio_num_t sda_io, gpio_num_t scl_io);

// 更新角度（需定时调用）
void AS5600_update(AS5600_t *sensor);

// 获取单圈机械角度（rad）
float AS5600_getMechanicalAngle(AS5600_t *sensor);

// 获取多圈角度（rad）
float AS5600_getAngle(AS5600_t *sensor);

// 获取角速度（rad/s）
float AS5600_getVelocity(AS5600_t *sensor);

// 内部原始角度读取（rad）
float AS5600_getSensorAngle(AS5600_t *sensor);

#ifdef __cplusplus
}
#endif

#endif // AS5600_H_
